'''有三个骰子，每次一起抛出，现在用随机函数模拟抛掷1000次。这1000次中有多少次投出“666”？有多少次出现三个骰子点数一样的情况？
如果假定最初有500个筹码，三个骰子的点数之和大于10算赢，小于等于10算输，每次输赢一个筹码，那么最后是赢还是输？曾经达到的最大输赢是多少？'''
import numpy as np
import random
np.random.seed(7)#注释该行，使每次测试都有变化
num = 1000#抛掷总数
dice = np.random.randint(1,7,size=(num,3))#产生1000X3数组dice，随机整数范围【1,6】，注意函数中要写为7
dice = np.column_stack((dice,dice.sum(axis=1)))#计算三个骰子的点数之和，添加到dice末尾列(添加新维度）（形成1000X4的数组）
point = dice[:,3]#取点数之和列
print('投掷出3个6的次数',(point == 18).sum())#出现3个6的次数
print('3个6此出现在第x次',np.where(point == 18))#出现在第x次

condition = np.logical_and(dice[:,0] == dice[:,1],dice[:,1] == dice[:,2])#判断出三次投掷点数一样的行，得到一个布尔数组
print('\n三次投掷点数均相同的次数：',condition.sum())#计算出布尔数组中True的次数
print('投掷情况为：',dice[condition])#显示Ture对应的行内容

money = 500#初始筹码数
bep = 10#>10赢,<=10输
print('\n初始筹码：',money,'，盈亏点：',bep,'，每次输赢为1')
total = money+(point>bep).sum()-(point<=bep).sum()#最后筹码的计算函数
print('最后筹码',total)

dice = np.column_stack((dice,np.where(dice[:,3]>bep,1,-1)))#用np.where判断每次输赢，返回1，-1构成的每次盈亏列，添加到末尾，变为1000X5
dice = np.column_stack((dice,np.cumsum(dice[:,4])))#用np.cumsum累加每次盈亏，得到的累积盈亏列添加到末尾列，变为1000X6
dice = np.column_stack((dice,dice[:,5]+money))#用累积盈亏列加初始筹码，得到当前筹码，添加到末尾列，变为10007
s = '曾经的最高筹码数{}，出现在第{}次'
print(s.format(np.max(dice[:,6]),np.argmax(dice[:,6])))
s = '曾经的最低筹码数{}，出现在第{}次'
print(s.format(np.min(dice[:,6]),np.argmin(dice[:,6])))

print('-------------绘图----------------')
import matplotlib.pyplot as plt   #引入绘图库
plt.rcParams['font.sans-serif'] = ['SimHei']#制定中文黑体字体
plt.xticks(fontsize=14)#设置x轴文字大小
plt.yticks(fontsize=14)#设置y轴文字大小
plt.title('筹码变化',fontsize=16)#设置标题文字
plt.plot(dice[:,-1])#绘制函筹码变化折线图
plt.show()#显示绘图